草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

c++ - 我怎样才能让 g++ 模仿 MSVC++ 的模板实例化行为?

我正在尝试将我自己的库从VisualStudio移植到GNU/Linux上的g++,但我遇到了一些模板编译问题。事实上,在VisualC++中,只有在代码中明确使用模板时才会生成模板,而g++似乎(从我的错误来看)在模板首次使用之前评估模板的内容。这会导致以下错误:error:incompletetype‘X’usedinnestednamespecifier...因为我在模板代码之后而不是之前包含了一些类。由于交叉使用冲突,我这样做。总而言之,VisualC++似乎不会尝试在使用时解析模板的内容,而g++会尽快解析。classMyClass;templatevoidfunc(MyCl

c++ - std::map of boost::mutex 具有奇怪的行为

我有这个代码://////DefaultNamespaces///usingnamespacestd;typedefmapt_map_shared_mutex;intmain(intargc,char**argv){t_map_shared_mutexlist_lock;boost::shared_mutexglobal_lock;stringi="ABC";boost::unique_lockl_lock(global_lock);boost::unique_locklock(list_lock[i]);//DoSomethingwiththatlocklock.unlock();l

c++ - 为什么我的编辑控件在不使用 MFC 的 win32 c++ 应用程序中看起来很奇怪?

我有这个程序,我在其中创建了一个窗口,并在其中使用普通C(没有MFC或对话框)添加了一个编辑控件,编辑控件创建代码如下hWnd=::CreateWindowExA(NULL,//noextendedstyle"EDIT",NULL,//notitleWS_CHILD|WS_VISIBLE|WS_BORDER,x,y,Width,Height,hWndParent,(HMENU)id,(HINSTANCE)GetWindowLong(hWndParent,GWL_HINSTANCE),//themoduleinstanceNULL);但是渲染出来的控件看起来很难看...这就是我希望我的控

c++ - 从 STDIN 读取 int 时的奇怪行为

假设我们有一个向用户展示一些选项的菜单:Welcome:1)Dosomething2)Dosomethingelse3)Dosomethingcool4)Quit用户可以按1-4,然后按回车键。该程序执行此操作,然后将菜单呈现给用户。无效的选项应该再次显示菜单。我有以下main()方法:intmain(){while(true)switch(menu()){case1:doSomething();break;case2:doSomethingElse();break;case3:doSomethingCool();break;case4:return0;default:continue

c++ - 字符串类中 size() 和 at() 的不正确行为

我有这个代码:stringtest("żaba");cout输出很奇怪:Word:żabaLength:5Letter:�如您所见,长度应为4,字母:“ż”。如何更正此代码以使其正常工作? 最佳答案 你的问题没有提到编码,所以我要在黑暗中刺探一下,说这就是原因。第一步:阅读TheAbsoluteMinimumEverySoftwareDeveloperAbsolutely,PositivelyMustKnowAboutUnicodeandCharacterSets(NoExcuses!).在那之后,应该清楚“裸字符串”这样的东西并不

c++ - 使用 shared_ptr 时奇怪的双析构函数调用

最后我找到了一个非常奇怪的错误,这是由两次调用析构函数引起的。这是重现错误的最少代码:#include#include#includeclasscEventSystem{public:cEventSystem(){std::cout(eventSystem);}voidonEvent(){}std::shared_ptrtileBrowser;};intmain(){cEventSystemeventSystem;cGuigui(eventSystem);}输出是:constructor:0x7fffffffe67fdestructor:0x7fffffffe2dfdestructor

c++ - 奇怪的异常抛出 - 分配 : Operation not permitted

我想从cin进行异步读取,因此我有一段代码客户端.h...boost::asio::posix::stream_descriptorinput;boost::asio::streambufinput_buffer客户端.cppClient::Client(intargc,char**argv,boost::asio::io_service&io_service):tcp_socket(io_service),udp_socket(io_service),input(io_service,::dup(STDIN_FILENO)){...read_std_input();}voidClie

c++ - XOR 交换算法中运算符的未定义行为?

voidswap(int*a,int*b){if(a!=b)*a^=*b^=*a^=*b;}因为上面的*a^=*b^=*a^=*b只是*a=*a^(*b=*b^(*a=*a^*b)),可以(例如)在第三个*a之前对第二个*a进行求值(对于XOR)修改(由=)?用C99/C11/C++98/C++11写有关系吗? 最佳答案 C++11标准说:5.17/1:Theassignmentoperator(=)andthecompoundassignmentoperatorsallgroupright-to-left.(...)theassi

c++匿名构造函数做奇怪的事情

此示例程序显示了如何根据您传入的是局部变量、全局变量还是匿名变量来调用不同的构造函数。这是怎么回事?std::stringglobalStr;classaClass{public:aClass(std::strings){std::cout鉴于我可以调用globalStr.puke(),我猜测通过调用aClass(globalStr);,它正在创建一个名为的局部变量>globalStr类型aClass被用来代替全局globalStr。调用aClass(localStr);尝试做同样的事情,但编译失败,因为localStr已经声明为std::string。是否可以通过使用非常量表达式调用

c++ - 奇怪的运算符重载, "operator T& () const noexcept { return *_ptr; }"

我研究了一下,operator函数的格式是(returnvalue)operator[space]op(arguments){implementation}但是,在std::reference_wrapper实现中,有一个运算符重载函数声明为operatorT&()constnoexcept{return*_ptr;。这个运算符和T&operator()constnoexcept{return*_ptr;不同吗?}?.如果两者不同,那么第一个有什么用? 最佳答案 运算符T&()constnoexcept;是一个user-define